home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Browsers, Managers & Extensions / Firefox Backup Extension 6.0.3 / chrome / febe.jar / content / febeScheduleBackup.js < prev    next >
Text File  |  2008-08-24  |  13KB  |  370 lines

  1. // author: Chuck Baker
  2. // contact: febe@customsoftwareconsult.com
  3. // Version 6.0
  4.  
  5.     var febeBackupInProgress = new Boolean(false);    // Is a backup currently running?
  6.     var febeScheduledBackupID = new Number;            // PID of scheduled backup
  7.     var febeScheduledWarningID = new Number;        // PID of scheduled backup warning
  8.     var febeNextBackup = new String();                // Text description of next scheduled backup
  9.     var febeSchedule = new String()                    // Scheduled backup frequency
  10.     var febeIsScheduled = new Boolean(false)        // Is a backup scheduled?
  11.     var febeSetTimeoutID = [];                        // Array holing settimeout ids
  12.     var febeDailyHour = new Number;                    // Hour(00 - 23) of daily backup
  13.     var febeDailyMinute = new Number;                // Minute (0 - 55) of daily backup, 5 min increments
  14.     var febeWeeklyDay = new Number;                    // Day of week (sun=0 ... sat=6) of daily backup
  15.     var febeWeeklyHour = new Number;                // Hour(00 - 23) of weekly backup
  16.     var febeWeeklyMinute = new Number;                // Minute (0 - 55) of weekly backup, 5 min increments
  17.     var febeMonthlyDay = new Number;                // Day of month (1 - 28) of monthly backup
  18.     var febeMonthlyHour = new Number;                // Hour(00 - 23) of monthly backup
  19.     var febeMonthlyMinute = new Number;                // Minute (0 - 55) of monthly backup, 5 min increments
  20.     var febeNB = new Date();                        // Next backup date
  21.     var febeScheduledBuTimer;                        // nsITimer object
  22.  
  23. function febeScheduledBuTimerInit(delay){
  24.     if(febeIsScheduled == true){
  25.         var d = document.getElementById("nextbackupdate");
  26.         if(d) d.value= febeLocalizedDate(febeNB);
  27.         var prefName = "extensions.febe.schedule.description";
  28.         febeNextBackup = febeSetUnicharPref(prefName,febeLocalizedDate(febeNB));
  29.         febeSetStatus();
  30.     }else{
  31.         document.getElementById("nextbackupdate").value = febeMsg[113];
  32.         if(febeScheduledBuTimer) febeScheduledBuTimer.cancel();
  33.         //clearTimeout(febeWarnSID);
  34.         return false;
  35.     }//if
  36.     febeScheduledBuTimer.initWithCallback(febeStartScheduledBackup, delay, Ci.nsITimer.TYPE_ONE_SHOT);
  37.     return true;
  38. }//febeScheduledBuTimerInit()
  39.     
  40. function febeScheduleBackup(){
  41.   // Determine when (or if) a scheduled backup will take place and put it in the queue
  42.     if(febeBuInProgress()){
  43.         if(!febeBuInProgressCheck()) {return false;}
  44.     }//if
  45.     febeSetTimeoutID = [];
  46.     if(!febeScheduleInit()){return;}
  47.     
  48.     var now = new Date().getTime();    // Current time in milliseconds    
  49.     var oneDay = 24 * 60 * 60 * 1000;    // One day in milliseconds
  50.     var tmp = new Number;
  51.     febeNB = new Date();
  52.     febeNB.setSeconds(0);
  53.     var d = new Date();
  54.     switch(febeSchedule){
  55.         case "daily":
  56.             febeNB.setHours(febeDailyHour);
  57.             febeNB.setMinutes(febeDailyMinute);
  58.             febeWait = febeNB.getTime() - now;
  59.             if(febeWait <= 0){            // Scheduled time already passed
  60.                 tmp = febeNB.getTime();
  61.                 tmp += oneDay;        // Add a day
  62.                 febeNB.setTime(tmp);    
  63.                 febeWait = febeNB.getTime() - now;
  64.             }//if
  65.             break;
  66.         case "weekly":
  67.             var today = d.getDay();
  68.             tmp = today * oneDay;
  69.             d.setTime(now-tmp);
  70.             d.setHours(0,0,0);        // Last Sunday, Midnight
  71.             var sunday = d.getTime();
  72.             tmp = febeWeeklyDay * oneDay;
  73.             febeNB.setTime(sunday + tmp);
  74.             febeNB.setHours(febeWeeklyHour);
  75.             febeNB.setMinutes(febeWeeklyMinute);
  76.             febeWait = febeNB.getTime() - now;
  77.             if(febeWait <= 0){            // Scheduled time already passed
  78.                 tmp = febeNB.getTime();
  79.                 tmp += (oneDay * 7);// Add a week
  80.                 febeNB.setTime(tmp);    
  81.                 febeWait = febeNB.getTime() - now;
  82.             }//if
  83.             break;
  84.         case "monthly":
  85.             febeNB.setDate(febeMonthlyDay);
  86.             febeNB.setHours(febeMonthlyHour);
  87.             febeNB.setMinutes(febeMonthlyMinute);
  88.             febeWait = febeNB.getTime() - now;
  89.             if(febeWait <= 0){            // Scheduled time already passed
  90.                 var numDaysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
  91.                 numDaysInMonth[1] += febeLeapYear();    // Leap year fix
  92.                 var thisMonth = d.getMonth();
  93.                 var nextMonth = thisMonth + 1;
  94.                 if(nextMonth == 12){nextMonth = 0};
  95.                 var dayOfMonth = d.getDate();
  96.                 var daysLeftThisMonth = numDaysInMonth[thisMonth] - dayOfMonth; 
  97.                 tmp = (daysLeftThisMonth +1) * oneDay;
  98.                 febeNB.setTime(now + tmp);
  99.                 febeNB.setHours(0,0,0);        // First day of next month at Midnight
  100.                 febeNB.setDate(febeMonthlyDay);
  101.                 febeNB.setHours(febeMonthlyHour);
  102.                 febeNB.setMinutes(febeMonthlyMinute);
  103.                 febeWait = febeNB.getTime() - now;
  104.             }//if
  105.             break;
  106.     }//switch
  107.     febeScheduledBuTimerInit(febeWait);
  108. }//febeScheduleBackup()
  109.  
  110. function febeStartScheduledBackup(){
  111.     febeWarn();
  112.     // Save process id in case user aborts
  113.     var to = new febeSetTimeoutObj;
  114.     to.PID = setTimeout(febeInit, 60000);
  115.     to.Process = 'febeInit()';
  116.     febeSetTimeoutID.push(to);
  117.     return true;
  118. }//febeStartScheduledBackup()
  119.  
  120. function febeScheduleInit(){
  121.     // Get daily time info
  122.     var prefName = "extensions.febe.schedule.daily.hour";
  123.     if(febePrefs.prefHasUserValue(prefName)){
  124.         febeDailyHour = febePrefs.getIntPref(prefName);
  125.     } else {
  126.         febePrefs.setIntPref(prefName,1);
  127.         febeDailyHour = 1;
  128.     }//if
  129.     var prefName = "extensions.febe.schedule.daily.minute";
  130.     if(febePrefs.prefHasUserValue(prefName)){
  131.         febeDailyMinute = febePrefs.getIntPref(prefName);
  132.     } else {
  133.         febePrefs.setIntPref(prefName,0);
  134.         febeDailyMinute = 0;
  135.     }//if
  136.  
  137.     // Get weekly time info
  138.     var prefName = "extensions.febe.schedule.weekly.day";
  139.     if(febePrefs.prefHasUserValue(prefName)){
  140.         febeWeeklyDay = febePrefs.getIntPref(prefName);
  141.     } else {
  142.         febePrefs.setIntPref(prefName,0);
  143.         febeWeeklyDay = 0;
  144.     }//if
  145.     var prefName = "extensions.febe.schedule.weekly.hour";
  146.     if(febePrefs.prefHasUserValue(prefName)){
  147.         febeWeeklyHour = febePrefs.getIntPref(prefName);
  148.     } else {
  149.         febePrefs.setIntPref(prefName,1);
  150.         febeWeeklyHour = 1;
  151.     }//if
  152.     var prefName = "extensions.febe.schedule.weekly.minute";
  153.     if(febePrefs.prefHasUserValue(prefName)){
  154.         febeWeeklyMinute = febePrefs.getIntPref(prefName);
  155.     } else {
  156.         febePrefs.setIntPref(prefName,0);
  157.         febeWeeklyMinute = 0;
  158.     }//if
  159.  
  160.     // Get monthly time info
  161.     var prefName = "extensions.febe.schedule.monthly.day";
  162.     if(febePrefs.prefHasUserValue(prefName)){
  163.         febeMonthlyDay = febePrefs.getIntPref(prefName);
  164.     } else {
  165.         febePrefs.setIntPref(prefName,1);
  166.         febeMonthlyDay = 1;
  167.     }//if
  168.     var prefName = "extensions.febe.schedule.monthly.hour";
  169.     if(febePrefs.prefHasUserValue(prefName)){
  170.         febeMonthlyHour = febePrefs.getIntPref(prefName);
  171.     } else {
  172.         febePrefs.setIntPref(prefName,1);
  173.         febeMonthlyHour = 1;
  174.     }//if
  175.     var prefName = "extensions.febe.schedule.monthly.minute";
  176.     if(febePrefs.prefHasUserValue(prefName)){
  177.         febeMonthlyMinute = febePrefs.getIntPref(prefName);
  178.     } else {
  179.         febePrefs.setIntPref(prefName,0);
  180.         febeMonthlyMinute = 0;
  181.     }//if
  182.  
  183.     // Get scheduled backup frequency
  184.     var prefName = "extensions.febe.schedule.frequency";
  185.     if(febePrefs.prefHasUserValue(prefName)){
  186.         febeSchedule = febePrefs.getCharPref(prefName);
  187.     } else {
  188.         febePrefs.setCharPref(prefName,"none");
  189.         febeSchedule = "none";
  190.     }//if
  191.     
  192.     // Set scheduled backup string
  193.     var prefName = "extensions.febe.schedule.description";
  194.     if(febePrefs.prefHasUserValue(prefName)){
  195.         febeNextBackup = febeGetUnicharPref(prefName);
  196.     } else {
  197.         febeSetUnicharPref(prefName,febeMsg[113]);
  198.         febeNextBackup = febeMsg[113];
  199.     }//if
  200.     febeIsScheduled = true;
  201.     if(febeSchedule == "none"){
  202.         febeIsScheduled = false;
  203.     }//if
  204.     febeSetStatus();
  205.     return febeIsScheduled;
  206. }//febeScheduleInit()
  207.  
  208. function febeScheduleChange(){
  209.     febeScheduleInit();
  210.     switch(febeSchedule){
  211.         case "daily":
  212.             febeDisableDaily(false);
  213.             febeDisableWeekly(true);
  214.             febeDisableMonthly(true);        
  215.             febeDisableScheduleInfo(false);    
  216.             break;
  217.         case "weekly":
  218.             febeDisableDaily(true);
  219.             febeDisableWeekly(false);
  220.             febeDisableMonthly(true);        
  221.             febeDisableScheduleInfo(false);    
  222.             break;
  223.         case "monthly":
  224.             febeDisableDaily(true);
  225.             febeDisableWeekly(true);
  226.             febeDisableMonthly(false);
  227.             febeDisableScheduleInfo(false);        
  228.             break;
  229.         case "none":
  230.             febeDisableDaily(true);
  231.             febeDisableWeekly(true);
  232.             febeDisableMonthly(true);
  233.             febeDisableScheduleInfo(true);            
  234.             break;
  235.     }//switch
  236. }//febeScheduleChange()
  237.  
  238. function febeDisableDaily(state){
  239.     document.getElementById("dailylabelID").disabled = state;
  240.     document.getElementById("dailyHourID").disabled = state;
  241.     document.getElementById("dailyMinuteID").disabled = state;
  242. }//febeDisableDaily()
  243.  
  244. function febeDisableWeekly(state){
  245.     document.getElementById("weeklylabelID").disabled = state;
  246.     document.getElementById("weeklylabelatID").disabled = state;
  247.     document.getElementById("weeklyDayID").disabled = state;
  248.     document.getElementById("weeklyHourID").disabled = state;
  249.     document.getElementById("weeklyMinuteID").disabled = state;
  250. }//febeDisableWeekly()
  251.  
  252. function febeDisableMonthly(state){
  253.     document.getElementById("monthlylabelID").disabled = state;
  254.     document.getElementById("monthlylabelatID").disabled = state;
  255.     document.getElementById("monthlyDayID").disabled = state;
  256.     document.getElementById("monthlyHourID").disabled = state;
  257.     document.getElementById("monthlyMinuteID").disabled = state;
  258. }//febeDisableDaily()
  259.  
  260. function febeDisableScheduleInfo(state){
  261.     document.getElementById("setschedulebtn").disabled = state;
  262.     document.getElementById("setschedulelbl").disabled = state;
  263.     document.getElementById("nextbackupdate").disabled = state;
  264.     document.getElementById("nextbackupdate").value=febeMsg[113];
  265. }//febeDisableDaily()
  266.  
  267. function febeSetScheduleBtn(){
  268.     febeScheduleInit();
  269.     febeScheduleBackup();
  270.     var tmp="<style>color: purple; font-weight: bold; font-size: 15px;</style>"+febeMsg[228];
  271.     if(febeConfirm(tmp)){febeRestartFx();}
  272.     return true;
  273. }//febeSetScheduleBtn()
  274.  
  275. function febeSetStatus(){
  276.   // Set statusbar icon
  277.     // Pointer to main browser window
  278.     var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  279.            .getService(Components.interfaces.nsIWindowMediator);
  280.     var win = wm.getMostRecentWindow("navigator:browser");
  281.     var d = win.document.getElementById("febestatusbar");
  282.     
  283.     var prefName = "extensions.febe.schedule.description";
  284.     febeNextBackup = febeGetUnicharPref(prefName);
  285.     febeLocalizedDate(febeNextBackup);
  286.     
  287.     if(febeIsScheduled == true){
  288.         d.setAttribute("status","normal");
  289.         var tmp = febeMsg[114] + febeNextBackup;
  290.     }else{
  291.         d.setAttribute("status","nobackup");
  292.         var tmp = febeMsg[113];
  293.     }//if
  294.     d.tooltipText = tmp;
  295.  
  296.     // Hide statusbar icons?
  297.     var prefName = "extensions.febe.hideIcons"
  298.     if(febePrefs.prefHasUserValue(prefName)){
  299.         febeHideIcons = febePrefs.getBoolPref(prefName);
  300.     }else{
  301.         febeHideIcons = false;
  302.         febePrefs.setBoolPref(prefName,febeHideIcons);
  303.     }//if
  304.     d.setAttribute("hidden",febeHideIcons);
  305. }//febeSetStatus()
  306.  
  307. function febeInvert(){
  308.   // Bug?  "oncommand" executed before preference change, so invert checked status
  309.     febeHideIcons = !(document.getElementById("hideIcons").value);
  310.     var prefName = "extensions.febe.hideIcons"
  311.     febePrefs.setBoolPref(prefName,febeHideIcons);
  312.     febeSetStatus();
  313. }//febeInvert()
  314.  
  315. function febeLeapYear(){
  316.   // returns 1 if now is a leap year, 0 otherwise 
  317.     var retval = 0;
  318.     var now = new Date();
  319.     var year = now.getFullYear();
  320.     
  321.     if(year % 4 == 0){
  322.         if(year % 100 != 0){
  323.             retval = 1;
  324.         }else{
  325.             if(year % 400 == 0){
  326.                 retval = 1;
  327.             }else{
  328.                 retval = 0;
  329.             }
  330.         }
  331.     }
  332.     return retval;
  333. }//febeLeapYear()
  334.  
  335. function febeDisplayLastBU(){
  336.     febeInitDir();
  337.     var febeResultsPage = FEBEdir.clone();
  338.     febeResultsPage.append("FEBEresults.html");
  339.     var results = false;
  340.     if(febeResultsPage.exists()) results = true;
  341.     var prefName = "extensions.febe.lastbackup";
  342.     if(febePrefs.prefHasUserValue(prefName)){
  343.         var tmp = febePrefs.getCharPref(prefName);
  344.         tmp = febeLocalizedDate(tmp);
  345.         document.getElementById("viewlastbudir").disabled = false;
  346.         document.getElementById("viewlastbupage").disabled = !results;
  347.     } else {
  348.         var tmp = febeMsg[173];
  349.         document.getElementById("viewlastbudir").disabled = true;
  350.         document.getElementById("viewlastbupage").disabled = true;
  351.     }//if
  352.     document.getElementById("febeLastBU").value = tmp;
  353.     return true;
  354. }//febeDisplayLastBU()
  355.  
  356. function febeViewLastBUdir(){
  357.     var prefName = "extensions.febe.lastbackup.folder";
  358.     if(febePrefs.prefHasUserValue(prefName)){
  359.         var febeBuDestDir = febePrefs.getCharPref(prefName);
  360.         febeOpenLink("file:///"+febeBuDestDir);
  361.     }//if
  362.     return true;
  363. }//febeViewLastBU()
  364.  
  365. function febeViewLastBUpage(){
  366.     febeOpenLink("chrome://febe/content/febeResultsLoad.html");
  367.     return true;
  368. }//febeViewLastBUpage()
  369.  
  370. //alert("febeScheduleBackup.js");